#!/bin/bash

print_logo() {
echo -e "
\033[0;1;31;91m▄\033[0;1;33;93m▄\033[0m    \033[0;1;36;96m▄\033[0;1;34;94m▄\033[0m    \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄\033[0m    \033[0;1;33;93m▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m   \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m   \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▀▀\033[0;1;33;93m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m██\033[0;1;35;95m██\033[0;1;31;91m██\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m██\033[0;1;36;96m██\033[0;1;34;94m██\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m   \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m   \033[0;1;36;96m██\033[0;1;34;94m▄▄\033[0;1;35;95m██\033[0m  
\033[0;1;31;91m▀\033[0;1;33;93m▀\033[0m    \033[0;1;36;96m▀\033[0;1;34;94m▀\033[0m    \033[0;1;31;91m▀\033[0;1;33;93m▀▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀\033[0m    \033[0;1;33;93m▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀▀\033[0;1;31;91m▀\033[0m
"
echo -e "
\033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄▄\033[0m     \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄▄\033[0m       \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄\033[0m      \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m               \033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m                \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█▀\033[0;1;36;96m▀▀\033[0;1;34;94m██\033[0m   \033[0;1;31;91m█\033[0;1;33;93m█▀\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m    \033[0;1;31;91m██\033[0;1;33;93m▀▀\033[0;1;32;92m██\033[0m   \033[0;1;34;94m▄\033[0;1;35;95m█▀\033[0;1;31;91m▀▀\033[0;1;33;93m▀█\033[0m             \033[0;1;32;92m█\033[0;1;36;96m▀▀\033[0;1;34;94m▀▀\033[0;1;35;95m██\033[0;1;31;91m▄\033[0m             \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█▄\033[0m                       \033[0;1;31;91m█\033[0;1;33;93m█\033[0m            \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m▀█\033[0;1;32;92m██\033[0;1;36;96m█▄\033[0m                 \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m             \033[0;1;32;92m█\033[0;1;36;96m█\033[0m \033[0;1;34;94m██\033[0m \033[0;1;35;95m█\033[0;1;31;91m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m       \033[0;1;34;94m▀█\033[0;1;35;95m█\033[0m              \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m               \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█▄\033[0;1;33;93m▄▄\033[0;1;32;92m██\033[0m   \033[0;1;34;94m█\033[0;1;35;95m█▄\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m    \033[0;1;34;94m██\033[0;1;35;95m▄▄\033[0;1;31;91m██\033[0m   \033[0;1;32;92m█\033[0;1;36;96m▄▄\033[0;1;34;94m▄▄\033[0;1;35;95m▄█\033[0;1;31;91m▀\033[0m            \033[0;1;31;91m▄\033[0;1;33;93m██\033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m     \033[0;1;33;93m██\033[0m      \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m  
\033[0m
"
}
# Function to show a loading animation
loading_animation() {
     local animation="|/-\\"
     local animation_duration=1
     local animation_interval=0.1
     local start_time=$(date +%s)

     while [ $(($(date +%s) - start_time)) -lt $animation_duration ]; do
         for ((i=0; i<${#animation}; i++)); do
             echo -ne "\r[*] Scanning files... ${animation:$i:1}"
             sleep $animation_interval
         done
     done
     echo
}

# Function to scan .py files
scan_py_files() {
     files=(
         "ddos/Flood_attack/index.sh|Flood attack"
         "ddos/Server_attack/index.sh|Server attack"
         "ddos/Slow_Attack/index.sh|Slow attack"
         "ddos/Protocol_specific_attack/index.sh|Protocol specific attack"
         "ddos/ipv6_attack/index.sh|IPv6 Flood attack"
         "ddos/Other_attack/index.sh|Other attacks"
     )
    
     for i in "${!files[@]}"; do
         IFS="|" read -r file_path description <<< "${files[$i]}"
         folder_path=$(dirname "$file_path")
         py_files=($(ls "$folder_path"/*.py 2>/dev/null | grep -v 'index.py'))
         count=${#py_files[@]}
         descriptions[$i]="${description} (${count})"
         paths[$i]="$file_path"
     done
}

# Function to display art
print_art() {
     echo -e "\033[1;34;40m[*]hoho ddos2"
     echo -e "\033[1;32;40m[*]Welcome to hoho_ddos2.0, a network hacker's tool for initiating DDOS attacks, featuring various types and methods of DDOS attacks. More DDOS methods will be updated in the future."
     echo -e "\033[1;37;40m
 --------------------------------------
|             Project Open Source       |
|https://github.com/sansjtw/hoho_ddos2  |
|https://gitee.com/sansjtw/hoho_ddos2   |
|                                       |
|             Blog Website              |
|http://dvrs3.osxo.cn/bb                |
|http://dvrss.ouuq.cn/f4                |
|                                       |
 --------------------------------------
"
     echo -e "\033[1;31;40m[-]Please do not use for illegal purposes."
     echo -e "\033[1;37;40m"
}

# Function to run a Python file
run_python_file() {
     local file_path="${paths[$1]}"

     if [ -f "$file_path" ] && [[ "$file_path" == *.sh ]]; then
         echo "ok"
         chmod +777 "$file_path"
         bash "$file_path"
     else
         echo -e "\033[1;31;40m[-]Error: File does not exist."
         echo -e "\033[1;37;40m"
     fi
}

main_description() {
 whiptail --title "hoho_ddos2.0 TUI" --msgbox "hoho ddos2\nWelcome to hoho_ddos2.0, a network hacker's tool for initiating DDOS attacks, featuring various types and methods of DDOS attacks. More DDOS methods will be updated in the future.\n\n --------------------------------------\n|                Project Open Source    |\n|https://github.com/sansjtw/hoho_ddos2  |\n|https://gitee.com/sansjtw/hoho_ddos2   |\n|                                       |\n|                Blog Website           |\n|http://dvrs3.osxo.cn/bb                |\n|http://dvrss.ouuq.cn/f4                |\n|                                       |\n --------------------------------------\nUse the ↑↓← → Enter keys or touch screen to operate.\nPlease do not use for illegal purposes." 25 80
}

# Function to display the main menu
main_menu() {
     while true; do
         options=()
         for i in "${!descriptions[@]}"; do
             options+=($((i+1)) "${descriptions[$i]}")
         done
         options+=(7 "Text menu")
         options+=(8 "About")
         options+=(9 "中文")
         options+=(0 "Exit")

         choice=$(whiptail --title "hoho_ddos2.0 TUI" --menu "Please choose the attack type:" 20 78 10 "${options[@]}" 3>&1 1>&2 2>&3)
        
         if [ $? -ne 0 ]; then
             echo "[-]Exiting..."
             break
         elif [ "$choice" == "0" ]; then
             echo "[-]Exiting..."
             break
          elif [ "$choice" == "7" ]; then
             python3 main.py
             break
         elif [ "$choice" == "8" ]; then
             main_description
         elif [ "$choice" == "9" ]; then
             chmod +x main_cn.sh
             bash main_cn.sh
             break
         else
             run_python_file $((choice-1))
         fi
     done
}

# Main function
main() {
     print_logo
     loading_animation
     scan_py_files
     print_art
     main_description
     main_menu
}

main
